home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / PPC1B3AA.ZIP / PPC.DOC < prev    next >
Text File  |  1996-08-31  |  32KB  |  768 lines

  1.                     s                                   s
  2.                    .$                                  .$
  3.                   .$$                                 .$$
  4.                  .$^$                                 $$$
  5.                 .$' $.    .s$Ss..       .s$Ss..       `$$     .s$Ss..
  6.                .$'  $$  .$$$²°^²$$s.  .$$$²°^²$$s.     `$.  .$$$²°^²$$s.
  7.              .$$'   $$  $$$      `$$  $$$      `$$      $$  $$$      `$$
  8.           .s$$$$$s. ²$. `²$$s.     ²  $$$        ²      $$. `²$$s.     ²
  9.        .sS$²°^°²S$$Ss.²    `$$$²'     $$$.        .sS.  $$$    `°²S$Ss.
  10.  ..ssS$$²'        `°²S$s.  .$$'       `$$$     .s$S²S$. $$$.    .s. `°²$s.
  11.  ²$S²'              $Sss. .$$'      .$ $$$. .s$S²'.$ $$ $$$$. .$$'     `$$
  12.                     $$$$$ $$$      .$$ `$$$ `²²' .$$ `$ $$$$$ $$$      .$$
  13.                     $$$$² `$$s.  .s$$'  `$$s.  .s$$'    $$$$² `$$s.  .s$$'
  14.                     $$²     `²$$$S²'  Ms. `²$$$S²'      $$²     `²$$$S²'
  15.                     $'                                  $'
  16.                           C       O       R       P.
  17.  
  18.                     Power PPL Compiler 1.OO Public Beta 3
  19.  
  20.                             (C) 1996 Lone Runner,
  21.                             The Aegis Corporation
  22.  
  23.                   ·  · ·-───────────────────────────--· ·  ·
  24.      
  25. ───────────────────────────────────────────────────────────────────────────────
  26. ▒▒▌ IMPORTANT ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  27. ───────────────────────────────────────────────────────────────────────────────
  28.  
  29.                   THIS IS A PUBLIC ...
  30.  
  31.  
  32.                               ▄▄██▄
  33.                              ██▀  ▀█
  34.                             ██  ▄▄█
  35.                            ██   ▀▄  █▀▀ ▀█▀ █▀█
  36.                            ██  ▄▄▀  █▀   █  █▀█
  37.                            ██ ▀▀    ▀▀▀  ▀  ▀ ▀
  38.                            ██
  39.                            █▀
  40.                            ▀          
  41.                                          ... VERSION
  42.  
  43.        I need your bug reports ! Send me your remarks at the address :
  44.  
  45.                               lone@mygale.org
  46.                        lone.runner@nuxes.frmug.fr.net
  47.                        francis.gastellu@ace.epita.fr
  48.  
  49. ───────────────────────────────────────────────────────────────────────────────
  50. ▒▒▌ DESCRIPTION ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  51. ───────────────────────────────────────────────────────────────────────────────
  52.  
  53.   PPC is a PPL Compiler. :)
  54.  
  55.   It will compile a standard PPS source up to v3.30 PPE format (equivalent
  56.   to PPLC 3.30)
  57.  
  58.   You say : "My compiler works great, why should i change?"
  59.  
  60.   I say   : "Because PPC will do all that your compiler does,
  61.              plus many more, and will compile to a usually
  62.              smaller and faster PPE. You will also be able
  63.              to use and make libraries, and much more!"
  64.  
  65.  
  66.                                               PPLC                PPC
  67.                                         ────────────────────────────────────
  68.     Seemless integration in PowerPPL           yes                yes
  69.          User Functions & Procedures           yes                yes
  70.            .LIB Generation & Linking           no                 yes
  71.    PPLdebug .SYM debug file creation           no                 yes
  72.          Autodeclare vars (optional)           no                 yes
  73.     Code control compiler directives           no                 yes
  74.          Syntax checking only option           no                 yes
  75.           Autodetect encoding method           no                 yes
  76.  Force flat ppe or any encoding type           no                 yes
  77.                Imbedded Select Cases           no                 yes
  78.      Chained simple while statements           no                 yes
  79.          Direct character addressing           no                 yes
  80.             Basic For/Next statement        93 bytes            55 bytes
  81.       Basic While/Endwhile statement        27 bytes            21 bytes
  82.               Simple While statement        16 bytes            16 bytes
  83.         3 cases SelectCase statement        75 bytes            57 bytes
  84.        Basic If/Else/Endif statement        27 bytes            21 bytes
  85.                  Simple If statement        13 bytes            13 bytes
  86.    3 cases If/Elseif/Endif statement        75 bytes            57 bytes
  87.                                         ────────────────────────────────────
  88.  
  89.   Note that the less number of bytes it takes, the faster it runs.
  90.  
  91. ───────────────────────────────────────────────────────────────────────────────
  92. ▒▒▌ INSTALLATION ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  93. ───────────────────────────────────────────────────────────────────────────────
  94.  
  95.   No Installation program is currently available. Unzip the archive
  96.   (using -d !) in a new directory (ie: C:\PPL).
  97.  
  98.   Add the following to your path:
  99.  
  100.   C:\PPL\BIN
  101.  
  102.   if you installed in C:\PPL of course.
  103.  
  104.  
  105.        C:\PPL
  106.        ├───BIN             binaries. PPC.EXE, RUN.EXE, DEB.EXE, PPLIB.EXE, PPLDEBUG.EXE (c)t4f
  107.        ├───LIB             Libraries binaries (*.LIB) 
  108.        ├───LIBSRC          Libraries sources 
  109.        └─┬─EXAMPLES        Example & demonstration files
  110.          └───...
  111.  
  112.   Edit the file PPC.INI located in the ..\BIN subdirectory to match your
  113.   needs.
  114.  
  115.   It is important to edit the path to libraries so you won't have to
  116.   use the #libpath directive or -lp option!
  117.  
  118.   Also, this INI file will let you choose whether or not the compiler will
  119.   use some options by default. For example, you could deactivate the default
  120.   generation of user variables by editing the following line :
  121.  
  122.   UserVars=1
  123.  
  124.   And setting its value to 0 :
  125.  
  126.   UserVars=0
  127.  
  128.  
  129.   PPC.EXE usage
  130.   ─────────────
  131.  
  132.         Usage: ppc [{+-}switch] [-option] filename[.pps] [filename[.lib] ...]
  133.  
  134.           +switch turn on option
  135.           -switch turn off option
  136.  
  137.           switch  action when turned on
  138.           d       make debug code (ppldebug .sym format)
  139.           dc      write debug.cod file (for internal debug purpose)
  140.           f       force flat PPE 2.00, do not honnor pcb encoding convention
  141.           h       force honnor pcb encoding convention (autodetect crypting version)
  142.           imp     set implicit variable declaration on (autodeclare option)
  143.           l       list source while compiling
  144.           lib     compile to .LIB library rather than .PPE
  145.           o       use alternate output style (PPLC-like)
  146.           s       only check syntax (don't create .PPE)
  147.           u       generates user variables
  148.     
  149.         Options:
  150.           -feN    force pcb encoding type. N=coding method
  151.           -lpXXXX specify library path. ie: lpC:\PP\LIB
  152.     
  153.         Use of a resonse file (for compatibility with any MAKE utility)
  154.         is also supported :
  155.  
  156.         ppc @filename
  157.  
  158.         command lines arguments will be read from the response file, each
  159.         parameter separated by a carriage return.
  160.  
  161.  
  162.     Details
  163.     ───────
  164.  
  165.     Switches:     description when activated with '+'
  166.  
  167.       {+-}d       generates debug code in .SYM ppldebug format.
  168.                   for now, this does not work in conjunction with
  169.                   external .LIB linking. but for any source not
  170.                   using external libraries, using -d will generate
  171.                   a valid (hopefully) .SYM debug symbol table to use
  172.                   with Tools4Fools'PPLdebug.
  173.  
  174.                   compiler directive equivalent: #debug
  175.  
  176.  
  177.       {+-}dc      this is used for my internal debugging. You don't
  178.                   need this switch.
  179.  
  180.       {+-}f       force generation a flat 2.00 unencoded PPE.
  181.                   Use this switch to tell the compiler not to honnor PCB
  182.                   encoding conventions. Be sure that this PPE will be run
  183.                   on a PCB version that will support it!
  184.  
  185.                   compiler directive equivalent: #flat
  186.  
  187.  
  188.       {+-}imp     set implicit variable declaration on.
  189.                   See below for more information about this option
  190.  
  191.                   compiler directive equivalent: #implicit
  192.  
  193.  
  194.       {+-}l       list sourec while compiling. This is for internal
  195.                   debugging. You should not need this switch.
  196.  
  197.  
  198.       {+-}lib     generate a .LIB rather than a .PPE
  199.                   a .LIB library offers all its functions, procedures,
  200.                   and global variables public to a source file just using
  201.                   the compiler directive #use libname
  202.  
  203.                   compiler directive equivalent: #lib
  204.  
  205.  
  206.       {+-}s       only check syntax. ppc will not create PPE on disk.
  207.  
  208.                   compiler directive equivalent: #syntax
  209.  
  210.  
  211.       {+-}uv      generates user variables. needed if you used any user
  212.                   variable such as U_SEC.
  213.  
  214.                   compiler directive equivalent: #user or #uservar
  215.  
  216.  
  217.       {+-}o       use alternate console output style. With this switch turned
  218.                   on you will get messages taht will look just like PPLC ones.
  219.                   This allows the use of PPC in PowerPPL.
  220.  
  221.       Options :
  222.  
  223.  
  224.          -feN     force to a specific encoding type. N is the encoding method.
  225.                   N=0 for PPE 2.00, N=1 for PPE 3.20, N=2 for PPE 3.30, and
  226.                   3 for Frontier Script 1.00
  227.  
  228.                   compiler directive equivalent: #force encoding N
  229.  
  230.  
  231.          -lpXXXX  specify path for libraries. for example -lpC:\LIB
  232.                   will tell the compiler to search libraries in C:\LIB.
  233.  
  234.                   compiler directive equivalent: #libpath XXXX
  235.  
  236.  
  237.   List of compiler directives :
  238.   ─────────────────────────────
  239.  
  240.       #libpath yourpath             ; set library path to 'yourpath'
  241.       #use yourlib (or #uses)       ; include library 'yourlib'
  242.       #lib                          ; generate .LIB rather than .PPE
  243.       #ppe                          ; force generating .PPE even if "-lib"
  244.       #user / #uservar              ; generate user variables
  245.       #nouser / #nouservar          ; don't generate user variables even if "-uv"
  246.       #syntax                       ; only check syntax (don't create .PPE)
  247.       #compile                      ; force PPE creation on disk even if "-s"
  248.       #error message                ; end compilation with error 'message'
  249.       #warning message              ; generates a compilation warning
  250.       #note message                 ; issues a note from the compiler
  251.       #implicit                     ; set implicit variable declaration
  252.       #explicit                     ; force explicit variable declaration even if "-imp"
  253.       #debug                        ; generate debug table .SYM file
  254.       #nodebug                      ; force no debug .SYM file even if "-d"
  255.       #encoding (or #enc)           ; autodetect encoding type even if "-f" or "-feN"
  256.       #force encoding N (or #fe N)  ; force encoding type N
  257.       #flat                         ; force no encoding (PPE 2.00) even if "-feN"
  258.       #include yourfile.ext         ; includes an external file (also accept pplc syntax: '$include:yourfile.ext)
  259.  
  260.  
  261.   Options priority is the following:
  262.  
  263.   - First, the compiler will read PPC.INI to set default options
  264.   - Then, it will read the command line to change options to what is
  265.     desired this session.
  266.   - Finally, when compiling, compiler directives may again change options
  267.     for this session.
  268.  
  269.     Compiler directives have the highest level of priority over command line
  270.     and INI file.
  271.  
  272. ───────────────────────────────────────────────────────────────────────────────
  273. ▒▒▌ CREATING LIBRARIES ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  274. ───────────────────────────────────────────────────────────────────────────────
  275.  
  276.   Creating a library is really simple.
  277.  
  278.   When you have a source file with Functions & Procedures you wish to put
  279.   in a library, simply compile it with the +lib switch (or #lib compilation
  280.   directive) and you will end up with a .LIB file.
  281.  
  282.   For a cleaner library, you could edit your source as a separate
  283.   library source, apart of your original ppe source, so you don't put any
  284.   code in the main section. This is not mandatory, but will generate a
  285.   smaller library.
  286.  
  287.   If your source is dedicated to compile to a lib, put #lib at the
  288.   beginning of the file so ppc will always compile to a .LIB
  289.  
  290.   Note :
  291.  
  292.      ■ You cannot build a library if you use external libraries.
  293.        All libraries are from a single source.
  294.  
  295. ───────────────────────────────────────────────────────────────────────────────
  296. ▒▒▌ USING LIBRARIES ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  297. ───────────────────────────────────────────────────────────────────────────────
  298.  
  299.   To use a library you previously created or you downloaded as a ppl library
  300.   package, put your library in your source path (you could also put it in
  301.   a general lib path and use #libpath or -lpXXXX).
  302.  
  303.   Put the following line at the top of your source :
  304.  
  305.   #use libname
  306.  
  307.   where 'libname' is the name of the library you whish to use.
  308.  
  309.   That's all, you can now use any Function, Procedure, or Global variable
  310.   from the library, directly in your source, without any more declaration.
  311.  
  312.   Note :
  313.  
  314.      ■ You cannot build a library if you use external libraries.
  315.        All libraries are from a single source.
  316.  
  317. ───────────────────────────────────────────────────────────────────────────────
  318. ▒▒▌ ENCODING ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  319. ───────────────────────────────────────────────────────────────────────────────
  320.  
  321.   Because of decompilers (ahem... ;)) Clark Development Company decided to
  322.   encode their PPE.
  323.  
  324.   There are basically 3 methods of encoding for PCB, and one more format
  325.   reserved to Frontier:
  326.  
  327.   - none               (v2.00)
  328.   - simple encoding    (v3.01, v3.10, v3.20)
  329.   - double encoding    (v3.30)
  330.   - Frontier-specific  (Frontier Script v1.00)
  331.  
  332.   Note that fontier-specific PPE are not crypted in any way, this speeds up
  333.   the loading of PPEs
  334.  
  335.   PPC gives you a total control over the encoding method used on the PPE.
  336.  
  337.   By default, PPC autodetects the encoding method that should be used
  338.   based on the statements you use, and the structure of your program.
  339.  
  340.   For example, if you use user functions and procedures, ppc will
  341.   automatically encode to a PPE 3.01. If, in addition, you use some
  342.   specific version statements and functions, ppc will autoswitch to the
  343.   specific version. For example, if you use Findfirst in your PPE, ppc will
  344.   autoswitch to a PPE 3.10. If you use ChDir, ppc will switch to a PPE 3.20.
  345.  
  346.   PPC will allways use the lowest PPE version it can so your PPE will work
  347.   on most systems. For example, if you used user procedures and functions,
  348.   but no version specific statements, PPC will compile to a 3.01 so it will
  349.   run on PCBoard 15.20, 15.21, 15.22 & 15.23.
  350.  
  351.   Furthermore, you may also force crypting to one of the three specific
  352.   encoding method listed above by using the -feN option or #force encoding N
  353.   directive where N is :
  354.  
  355.   0 for PPE 2.00 (no encoding)
  356.   1 for PPE 3.20 (simple encoding)
  357.   2 for PPE 3.30 (double encoding)
  358.   3 for Frontier Script 1.00 (no encoding + specific header)
  359.  
  360.   A simple switch has been added for method 0: +f or #flat directive.
  361.  
  362.   Important Note:
  363.  
  364.      PCBoard does not care about which encoding method is used when it
  365.      executes the PPE. If you are sure the version of PCboard that will
  366.      run your PPE will handle all statements you used and the structure
  367.      of your program (particularly user functions/procedures), you can
  368.      SAFELY compile to a PPE 2.00. PCBoard will not decrypt it, and the
  369.      result will be a much faster loading of the PPE.
  370.      You can use this for your personnal use but this is risky if you
  371.      spread an unencoded PPE 2.00 containing 3.xx specific stuff. You are
  372.      not guaranteed that the end user of your PPE will have the last version
  373.      of PCBoard or at least, a version that handle all what you used in your
  374.      PPE.
  375.  
  376.      So, it is a good idea to let the compiler decide which encoding method
  377.      to use, and maybe recompile everything to a v2.00 for your personnal
  378.      use.
  379.  
  380.      Of course, compiling to a Frontier specific PPE will not allows you to
  381.      run it under PCBoard.
  382.  
  383.   Note also:
  384.  
  385.   PPE 1.00 is not supported as it only makes restrictions, and force handling
  386.   of a different basic variable structure. As it is totally unnecessary, i
  387.   decided to let v1.00 unsupported. But who needs a v1.00 PPE ??
  388.  
  389. ───────────────────────────────────────────────────────────────────────────────
  390. ▒▒▌ BRACKETS [] ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  391. ───────────────────────────────────────────────────────────────────────────────
  392.  
  393.   In the original PPL language, '[' & ']' are equivalent to '(' & ')'.
  394.  
  395.   For PPC, '[' & ']' are used to retreive a specific character from a string.
  396.  
  397.   For exemple:
  398.  
  399.       String A
  400.  
  401.       A = "Hello"
  402.       PrintLn A[1]
  403.  
  404.   This will output 'H'.
  405.  
  406.   Brackets may also be used with any other type than string, just consider
  407.   that the value will first be converted to string (with datatype sepecific
  408.   conversions applying, such as date/time/money...)
  409.  
  410.   Requesting a char outside the valid range of the string will return a
  411.   space (ascii 32).
  412.  
  413.   Note: If you're used to C-style char array subscripts, note that unlike
  414.   C, "[1]" point at the first char of specified object, not the 2nd (C starts
  415.   with 0)
  416.  
  417. ───────────────────────────────────────────────────────────────────────────────
  418. ▒▒▌ IMPLICIT VARIABLES ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  419. ───────────────────────────────────────────────────────────────────────────────
  420.  
  421.   This option is designed for programmers used to code in BASIC. In the
  422.   basic language, you don't need to declare variables. Using an undeclared
  423.   variable automatically declares it.
  424.  
  425.   #implicit directive or +imp switch will recreate this option. You won't
  426.   need anymore to declare your variables.
  427.  
  428.   While you use the implicit declarations, it is still legal to declare some
  429.   variables, for example, as you will see bellow, to use variable of
  430.   non-standard type.
  431.  
  432.   Variables types will be found with the name of the variable itself, or
  433.   more precisely, with the suffix character. here is an example :
  434.  
  435.     var name            suffix           implicit type
  436.     ──────────────────────────────────────────────────
  437.     example              none                int
  438.     example%               %                 int
  439.     example$               $                 string
  440.     example&               &                 long
  441.     example!               !                 float
  442.     example#               #                 double
  443.  
  444.     Variables of other types must be declared explicitly.
  445.  
  446.   Explicitly declared variables suffix has no meaning and may contradict
  447.   with implicit rules. A variable "example$" declared as an integer is
  448.   legal and will be interpreted as an integer even if #implicit was
  449.   specified because this specific variable has been explicitly declared.
  450.  
  451.   Using implicit types with libraries
  452.   ───────────────────────────────────
  453.  
  454.   Be carefull when using implicit variables declaration with library
  455.   linking. Sometimes you will need to access global variables from an
  456.   external library. Without implicit option, if you mispell the variable
  457.   name, the compiler will issue an error, with implicit option, the compiler
  458.   will automatically declare this new variable and your source will
  459.   certainly not work.
  460.  
  461.   So if you planned to use implicit option together with libraries, be
  462.   carefull and check twice the names of globals!
  463.  
  464.   You may try an alternative : use the compiler directives #implicit
  465.   and #explicit to control how the compiler will handle undeclared variables.
  466.   For example:
  467.  
  468.   ------
  469.   #lib mylib
  470.   #implicit
  471.  
  472.   Word$ = "Hello"
  473.   PrintLn Word$
  474.  
  475.   #explicit
  476.   GlobalLibParameter = "Test"
  477.   #implicit
  478.  
  479.   GlobalLibProc()
  480.   ------
  481.  
  482.   In this case, you can see that the global reference is between two
  483.   compiler directive. The first sets the compiler in explicit variable
  484.   declaration mode, so if you mispell the global variable name, the compiler
  485.   will complain. The second directive sets back the compiler to implicit
  486.   variable declaration, and so you may continue to use vars as you're used
  487.   to.
  488.  
  489.  
  490.   Note:
  491.   -----
  492.  
  493.   I would suggest that you forget about the implicit variable declaration
  494.   option as soon as possible. Using implicitly declared variables is a
  495.   constant source of bugs. Declaring all your variables lead to a cleaner
  496.   code, and usually to a much better organized work.
  497.  
  498. ───────────────────────────────────────────────────────────────────────────────
  499. ▒▒▌ NUMERIC VALUES ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  500. ───────────────────────────────────────────────────────────────────────────────
  501.  
  502.   The following notations are supported :
  503.  
  504.   (numeric)b                          -> binary value            11111111b
  505.   (numeric)o                          -> octal value             377o
  506.   (numeric)h                          -> hexadecimal value       0FFh
  507.   (numeric)                           -> decimal value           255
  508.   (numeric)d                          -> decimal value           255d
  509.   (numeric).(numeric)[E[+-](numeric)] -> double precision value  255.0
  510.  
  511. ───────────────────────────────────────────────────────────────────────────────
  512. ▒▒▌ DIFFERENCES WITH PPLC ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  513. ───────────────────────────────────────────────────────────────────────────────
  514.  
  515.   Although i tried to make PPC 100% compatible with PPLC, this has not been
  516.   completly possible for some reasons, mainly PPLC bugs or grammar
  517.   ambiguities in the original PPL language.
  518.  
  519.   Most sources will recompile without change with PPC, but there are rare
  520.   cases where you will need to enter some little modifications.
  521.  
  522.  
  523.      Names Ambiguities
  524.      ─────────────────
  525.  
  526.      - The original PPL language has names ambiguities, for example, the
  527.        keyword GetToken may be either a Statement or a Function.
  528.  
  529.        Fortunatly, statements and functions are used in a totally different
  530.        way, and so this abiguity is not a problem, but some other ambiguities
  531.        are problematic for the language itself: the PPL language originally
  532.        allows you to use any keyword as a variable name, for example:
  533.  
  534.        Int Step
  535.        For Step = Step To Step Step Step
  536.        Next
  537.  
  538.        will be compiled by the original PPL compiler, athought it is a
  539.        real braindead structure!
  540.  
  541.        PPC will not allow you to declare variable with internal keywords
  542.        names such as Step, For, Next, If, Then, Int, String... but also
  543.        internal functions and statements like Cls, Len, CurColor, ... are
  544.        not allowed as variable names.
  545.  
  546.        If you used a variable with an internal name, just add "_" or change
  547.        its name.
  548.  
  549.        For the same reason, the constant SEC has been changed to SECUR
  550.  
  551.        (SEC is used in the internal "DispFile" statement).
  552.  
  553.  
  554.      Embedded Structures
  555.      ───────────────────
  556.  
  557.        PPC will compile without problem some imbedded structures that
  558.        PPLC cannot compile :
  559.  
  560.          ■ While (expression) While (second_expression) .... do something
  561.  
  562.            (PPLC will stop compiling, complaning that it cannot found a
  563.            label...)
  564.  
  565.          ■ Select Case (exp)
  566.              Case ...
  567.              Case ...
  568.                 Select Case (exp)
  569.                       Case ...
  570.                       Case ...
  571.                 End Select
  572.              Case ...
  573.            End Select
  574.  
  575.            (PPLC will simply not let you do that. note that PPLC 3.01 was
  576.            able to compile embedded select cases, but this feature has been
  577.            removed in later versions)
  578.  
  579.        Both structures will be handled by PPC.
  580.  
  581.  
  582.      "Begin" Keyword
  583.      ───────────────
  584.  
  585.         In the original PPL language, if you include an external source,
  586.         you will need to do the following :
  587.  
  588.             '$USEFUNCS
  589.             '$INCLUDE:yoursource...
  590.  
  591.             Begin
  592.  
  593.             ... your code ...
  594.  
  595.         PPC will not need the '$USEFUNCS as it automatically detects the
  596.         use of Begin keyword.
  597.  
  598.       ■ If you use "Begin" in your code, your PPE will start there.
  599.       ■ If you don't use "Begin" in your code, your PPE will start at the
  600.         beginning of the code.
  601.  
  602.         Note: If you include a file with functions/procedures at the
  603.         beginning of your source, and if you don't use Begin, your PPE will
  604.         execute nothing, as it will stop at the beginning of the first
  605.         procedure/function. So if you use #include or '$include:, use Begin!
  606.  
  607. ───────────────────────────────────────────────────────────────────────────────
  608. ▒▒▌ DECOMPILERS ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  609. ───────────────────────────────────────────────────────────────────────────────
  610.  
  611.    Due to some differences with PPLC, some programs compiled with PPC will
  612.    not decompile correctly either will PPLX or with PPLD (bugs may have
  613.    various symptoms: empty procedures, aborting decompilation, garbage in
  614.    code, crash, ...).
  615.  
  616.    This is because PPLX & PPLD assume some variables to be set to specific
  617.    values (which are PPLC dependant). Because the global organisation of
  618.    variables (specially for functions & procedures in the case of PPLX) is
  619.    not the same, errors appears. But PCB will perfectly handle the PPEs.
  620.  
  621.    (In fact, i've understood some things during the programming of the
  622.    compiler that i did not during the decompiler :)
  623.  
  624.    I should release a fixed version of my decompiler someday, if i have time.
  625.  
  626. ───────────────────────────────────────────────────────────────────────────────
  627. ▒▒▌ DISCLAIMER ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  628. ───────────────────────────────────────────────────────────────────────────────
  629.  
  630.   This compiler is free, and so are anything you produce with it. All your
  631.   work compiled with PPC is ROYALTY FREE and may be distributed the way
  632.   you want.
  633.  
  634.   PPC is free, but this does not means the author leaves it to public
  635.   domain. PPC is NOT PUBLIC DOMAIN, but is free to be used by anybody.
  636.  
  637.   Because this compiler is free, i don't planned to give any extended
  638.   support to users encoutering problems. The only way to reach me is mail
  639.   (snalemail, email or bbs), and so is the only way i will reply.
  640.  
  641.   IN NO EVENT WILL I (THE AUTHOR) BE LIABLE TO YOU FOR  ANY DAMAGES,
  642.   INCLUDING  ANY LOST  PROFITS, LOST  SAVINGS  OR  OTHER  INCIDENTAL
  643.   OR  CONSEQUENTIAL DAMAGES ARISING  OUT OF YOUR USE OR INABILITY TO
  644.   USE THE PROGRAM, OR FOR ANY CLAIM BY ANY OTHER PARTY.
  645.  
  646. ───────────────────────────────────────────────────────────────────────────────
  647. ▒▒▌ REACH THE AUTHOR ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  648. ───────────────────────────────────────────────────────────────────────────────
  649.  
  650.   If you like this product, send me a postcard!
  651.   If you REALLY like this product, send me a CD, or some hardware :)
  652.  
  653.   Please, note that it may take some time before you get a reply. I'm
  654.   really sorry about that, but i'm kinda LOT busy :)
  655.  
  656.        Postal address:
  657.  
  658.        Francis Gastellu
  659.        42 Bd Stalingrad
  660.        94500 Champigny Sur Marne
  661.        FRANCE
  662.  
  663.        email:
  664.  
  665.        lone@mygale.org
  666.        lone.runner@nuxes.frmug.fr.net
  667.        francis.gastellu@ace.epita.fr
  668.  
  669.        bbs:
  670.  
  671.          A.C.E            - write to "Francis Gastellu"
  672.          +33-1-4588-7548
  673.          +33-1-4588-8809
  674.  
  675.          THE DEADLINE     - write to "Lone Runner"
  676.          +33-1-4648-6763
  677.          +33-1-4644-5796
  678.  
  679.          UNDERGROUND CAFÉ - write to "Lone Runner" or "Sysop"
  680.          +33-1-4882-2581
  681.  
  682.   You may want to check my homepage :
  683.  
  684.   http://www.mygale.org/04/lone
  685.  
  686. ───────────────────────────────────────────────────────────────────────────────
  687. ▒▒▌ INFORMATIONS ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  688. ───────────────────────────────────────────────────────────────────────────────
  689.  
  690.  PPC source code is :
  691.  
  692.     -  25 583 lines
  693.     - 570 179 bytes
  694.  
  695.  This was used to code PPC :
  696.  
  697.     ■ Programs
  698.  
  699.     - Borland C++ 3.1 - the good old one
  700.       Copyright (C) 1990, 1992 Borland International, Inc.
  701.       
  702.     - GNU Bison 1.11 - the awesome
  703.       Copyright (C) 1988, 1989 Free Software Foundation, Inc.
  704.       
  705.     - LEX - the usefull
  706.       Copyright (C) 1978, Charles H. Forsyth
  707.  
  708.     - Fortify - the lifeguard
  709.       Copyright (C) 1995 Simon P. Bullen - Cybergraphic
  710.  
  711.  
  712.     ■ Books & publications
  713.  
  714.     - "Compilers - Theory, Construction, Generation" by R.Wilhelm & D.Maurer
  715.       the original version in german is (C) 1992 Heidelberg
  716.       local translations copyrights apply.
  717.  
  718.       A very good book that i suggest you to get if you planned to begin
  719.       coding a compiler or an interpreter! 
  720.  
  721.     - Electronic (shorted) version of "LEX, a lexical analyser generator"
  722.       (C) Bell laboratories
  723.  
  724.     - Electronic articles of various gurus of compilers programmation
  725.       about the formal languages theory, non-contextual grammars, scanners
  726.       & parsers, and lexical, grammatical & semantic analysis found on the
  727.       net.
  728.  
  729.     ■ Included is PPLDebug, (C)1996 by Chicken & eULE / Tools 4 Fools
  730.  
  731. ───────────────────────────────────────────────────────────────────────────────
  732. ▒▒▌ LAST WORDS ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  733. ───────────────────────────────────────────────────────────────────────────────
  734.  
  735.   Thanks to the following people for having heavily contributed to what
  736.   PPC is now, by betatesting it :
  737.  
  738.   CyZ/Peanuts     - Thanks for having a totaly diffenrent way of coding
  739.                     compared to us :) This made you discover a lot of
  740.                     holes in the language itself. Thanks for the hard
  741.                     work you put in betatesting, thanks a lot! :)
  742.  
  743.   Hollowman       - I send you all the thanks you deserve for having received
  744.                     all those unfinished and buggy first beta versions with
  745.                     always a smile! :)
  746.  
  747.   Number6, Greedo, Jason, Splif, and all the others for supporting me in
  748.   the idea of developing this tool, as well as Frontier.
  749.  
  750.  
  751.   I hope you will enjoy my work...
  752.  
  753.       See you soon for our next major work, Project: Frontier.
  754.  
  755.  
  756.                                                            _.Lone Runner
  757.                                                     aka Francis Gastellu
  758.  
  759.  
  760.                                         _    _  _ ___ ___/\
  761.     _________/\  /\_____________/\________________ ___ _  _ \/\______________
  762.    /      _    \/   _________  /    ______________________  /   __________  /
  763.  _/     __/     \    ____)___\/     \         \_/         \/\___________  \/_
  764.  \      \        \_  \        \_     \__       \_            \_        /    /
  765.   \______\        /____________/________________/_____________/____________/kP
  766.   ·-------`------'---------------------------------------------------------·
  767.  
  768.